package com.niiwoo.civet.user.service;

import com.niiwoo.civet.user.dto.request.*;
import com.niiwoo.civet.user.dto.response.*;
import com.niiwoo.civet.user.enums.UserSMSTypeEnum;
import java.util.List;

/**
 * 用户登录账号API
 */
public interface UserLoginAccountDubboService {

    /**
     * 获取accountmapping信息
     * @param accountName
     * @return
     */
    AccountMappingDTO queryAccountMapping(String accountName);

    /**
     * 是否已绑定其它第三方帐号
     * @param userId,platform
     * @return
     */
    boolean isExistsOtherOpenId(String userId, Byte platformId);

    /**
     * 是否已绑定其它第三方帐号
     * @param userId,platform
     * @return
     */
    default boolean isExistsOtherOpenIdNew(String userId, String openId, Byte platformId){
        return false;
    };

    /**
     * 校验短信验证码
     * @param mobileNo
     * @param smsCode
     * @return
     */
    boolean validSMSCode(String mobileNo, String smsCode, UserSMSTypeEnum smsTypeEnum);

    /**
     * 校验注册验证码
     * @param mobileNo
     * @param smsCode
     * @param smsTypeEnum
     * @return
     */
    String validRegisterSMSCode(String mobileNo,String smsCode,UserSMSTypeEnum smsTypeEnum);

    /**
     * 注册
     */
    String register(LoginAccountRegisterRequestDTO request);

    /**
     * 获取有效的昵称
     */
    String getValidNickName(String nickName);

    /**
     * 插入昵称库
     */
    void insertNickName(String nickName);

    /**
     * 根据登录名获取登录账号
     */
    LoginAccountResponseDTO getLoginAccount(LoginAccountRequestDTO request);

    /**
     * openId是否有绑定记录
     * @param request
     * @return
     */
    ThirdLoginRequestDTO hasBindOpenId(ThirdLoginRequestDTO request);

    /**
     * 根据第三方openId获取帐号信息
     * @param request
     * @return
     */
    LoginAccountResponseDTO getAccountInfoByOpenId(ThirdLoginRequestDTO request);

    /**
     * 绑定第三方平台登录
     */
    boolean bindOpenId(ThirdLoginRequestDTO request);

    /**
     * 解绑第三方平台登录
     */
    boolean unbindOpenId(ThirdLoginRequestDTO request);

    /**
     * 获取我的第三方平台登录绑定列表
     */
    List<ThirdLoginResponseDTO> getMyBindList(String userId);

    /**
     * 登录前校验
     */
    void beforeLoginValid(BeforeLoginRequestDTO beforeLoginRequestDTO);

    /**
     * 登录后处理
     */
    void postLoginHandle(PostLoginRequestDTO postLoginRequestDTO);

    /**
     * 重置登录密码
     */
    boolean resetLoginPasswordBySMS(ResetLoginPasswordRequestDTO requestDTO);

    /**
     * 校验是否需要短信验证码
     * @param requestDTO
     * @return
     */
    boolean getLoginSMSStatus(LoginAccountRequestDTO requestDTO);

    /**
     * 融360自动注册
     */
    UserAutoRegisterDto autoRegister(AutoRegisterAndIdentityDto request);

    /**
     * 旧密码修改新密码
     * @return
     */
    void resetLoginPwdByOldOne(LoginPwdSelfResetPwdRequestDTO requestDTO);

    /**
     * 根据userId获取信息
     */
    LoginAccountResponseDTO getLoginAccount(String userId);

    /**
     * 查询用户密码设置状态
     * @param userId 用户ID
     * @return UserSecurityPasswordDTO
     */
    UserSecurityPasswordResponseDTO queryUserSecurityPassword(String userId);

    /**
     * 保存极光推送ID
     * @param jiGuangPushId
     */
    void saveJiGuangPushId(String userId, String jiGuangPushId);

    /**
     * 解锁账户
     * @return
     */
    boolean unlockAccount(String mobileNo, String smsCode);

    /**
     * 资产端用户自动注册
     * @param assetAutoRegisterBaseReqDTO
     * @return
     */
    default AssetAutoRegisterRespDTO assetAutoRegister(AssetAutoRegisterBaseReqDTO assetAutoRegisterBaseReqDTO){
        return null;
    }

}
